package com.daniel.design.pattern.template;

/**
 * @ClassName AbstractClass
 * @Description 抽象类（定义模板方法和基本方法）
 * @Author Daniel
 * @Version V1.0.0
 */
public abstract class AbstractClass {

    /**
     * 定义模板方法，烹饪的基本方法
     */
    public final void cookProcess() {
        // 按照步骤加载基本方法
        // 1.倒油
        this.pourOil();
        // 2.热油
        this.heatOil();
        // 3.加入蔬菜
        this.pourVegetable();
        // 4.加入配料
        this.pourSauce();
        // 5.翻炒装盘
        this.fry();
    }

    /**
     * 第一步倒油（具体方法）
     */
    public void pourOil() {
        System.out.println("锅里倒油");
    }

    /**
     * 第二步热油（具体方法）
     */
    public void heatOil() {
        System.out.println("起锅热油");
    }

    /**
     * 第三步倒入蔬菜（抽象方法）
     */
    public abstract void pourVegetable();

    /**
     * 第四步加入配料（抽象方法）
     */
    public abstract void pourSauce();

    /**
     * 第五步翻炒装盘（具体方法）
     */
    public void fry() {
        System.out.println("翻炒装盘");
    }
}

